// <!-- # B3927 [GESP202312 四级] 小杨的字典

// ## 题目描述
// 在遥远的星球，有两个国家 A 国和 B 国，他们使用着不同的语言：A 语言和 B 语言。小杨是 B 国的翻译官，他的工作是将 A 语言的文章翻译成 B 语言的文章。

// 为了顺利完成工作，小杨制作了一本字典，里面记录了 N 个 A 语言单词对应的 B 语言单词，巧合的是，这些单词都由地球上的 26 个小写英文字母组成。

// 小杨希望你写一个程序，帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-.[].{}\|;:'",./?<> 和一些 A 语言单词构成，每个单词之间必定由至少一个标点符号分割，你的程序需要把这段话中的所有 A 语言单词替换成它的 B 语言翻译。特别地，如果遇到不在字典中的单词，请使用大写 UNK 来替换它。

// 例如，小杨的字典中包含 2 个 A 语言单词 abc 和 d，它们的 B 语言翻译分别为 a 和 def，那么我们可以把 A 语言文章 abc.d.d.abc.abcd. 翻译成 B 语言文章 a.def.def.a.UNK. 其中，单词 abcd 不在词典内，因此我们需要使用 UNK 来替换它。

// ## 输入格式
// 第一行一个整数 N，表示词典中的条目数。保证 N≤100。

// 接下来 N 行，每行两个用单个空格隔开的字符串 A, B，分别表示字典中的一个 A 语言单词以及它对应的 B 语言翻译。保证所有 A 不重复；保证 A 和 B 的长度不超过 10。

// 最后一行一个字符串 S，表示需要翻译的 A 语言文章。保证字符串 S 的长度不超过 1000，保证字符串 S 只包含小写字母以及标点符号 !()-.[].{}\|;:'",./?<> 。

// ## 输出格式
// 输出一行，表示翻译后的结果。

// ## 输入输出样例
// ### 输入 #1
// ```
// 2
// abc a
// d def
// abc.d.d.abc.abcd
// ```
// ### 输出 #1
// ```
// a.def.def.a.UNK
// ```
// ### 输入 #2
// ```
// 3
// abc a
// d def
// abcd xxxx
// abc,(d)d!-abc?abcd
// ```
// ### 输出 #2
// ```
// a,(def)def!-a?xxxx
// ```
// ### 输入 #3
// ```
// 1
// abcdefghij klmnopqrst
// !()-[]{}\|;:'",./?<>abcdefghijklmnopqrstuvwxyz
// ```
// ### 输出 #3
// ```
// !()-[]{}\|;:'",./?<>UNK
// ``` -->

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    map<string, string> dict;
    cin >> N;
    while (N--) {
        string word1, word2;
        cin >> word1 >> word2;
        dict[word1] = word2;
    }
    string content, word = "";
    cin >> content;
    content += "\n"; // 方便处理最后一个单词
    int m = content.length();
    for (int i = 0; i < m; i++) {
        if (content[i] >= 'a' && content[i] <= 'z') {
            word += content[i];
        } else {
            if (!word.empty()) {
                if (dict.count(word))
                    cout << dict[word];
                else
                    cout << "UNK";
                word = "";
            }
            cout << content[i];
        }
    }
    return 0;
}

/*
1. map 是什么？
map 是 C++ STL（标准模板库）中的一种关联容器。
它的本质是“字典”或“映射表”，可以让你用一个“键”查找对应的“值”。
语法：map<键类型, 值类型> 变量名;
2. string 是什么？
string 是 C++ 标准库里的字符串类型，可以存储和操作文本。
3. map<string, string> dict; 的含义
这是声明了一个“键为 string，值也为 string”的 map，名字叫 dict。
你可以把它理解为“单词本”或“翻译字典”。
例如：dict["abc"] = "a"; 就是把 A 语言单词 "abc" 的 B 语言翻译设为 "a"。
4. 常用操作
插入/修改：dict["abc"] = "a";
查找：dict["abc"] 得到 "a"
判断是否存在：dict.count("abc") 返回 1 表示存在，0 表示不存在
5. 在本题中的作用
你需要把所有 A 语言单词和它的 B 语言翻译存起来，方便后面查找。
例如：
dict["abc"] = "a";
dict["d"] = "def";
当你遇到一个单词 word 时，只需查 dict[word]，如果有就输出翻译，没有就输出 "UNK"。
6. 代码片段举例
map<string, string> dict;
dict["abc"] = "a"; // 插入
if (dict.count("abc")) {
    cout << dict["abc"]; // 输出 a
} else {
    cout << "UNK";
}
7. 总结
map<string, string> dict; 就是一个“单词查翻译”的字典。
用法简单高效，查找和插入都是对数时间复杂度，适合做本题这种“查表替换”的任务。
如需 STL map 的底层原理或更多用法讲解，请继续提问！
*/

/*
取字符判断是否为小写字母，
是加入word中
不是则判断word是否为空，
    如果不为空则判断是否在字典中，
    如果在则输出对应的翻译，
    如果不在则输出"UNK"，并将word置为空

    如果是字符则直接输出

*/